package jschool.manejadores;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import jschool.entidades.Estudiante;
import jschool.persistencia.Conexion;

public class ManejadorDeEstudiante {
	private static ManejadorDeEstudiante instancia = null;
	private ArrayList<Estudiante> estudiantes = null;
	private Conexion conexion = null;
	private ResultSet rs = null;
	private PreparedStatement stmt = null;

	private ManejadorDeEstudiante() {
		conexion = Conexion.getInstancia();
	}

	public static ManejadorDeEstudiante getInstancia() {
		if (instancia == null) {
			instancia = new ManejadorDeEstudiante();
		}
		return instancia;
	}

	public ArrayList<Estudiante> getEstudiante() {
		estudiantes = new ArrayList<Estudiante>();
		try {
			String sql = "SELECT * FROM Estudiante";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			rs = conexion.hacerConsulta(sql);
			while (rs.next()) {
				Estudiante estudiante = new Estudiante(rs.getInt(1), rs
						.getInt(2), rs.getString(3), rs.getString(4), rs
						.getString(5), rs.getString(6), rs.getString(7), rs
						.getString(8), rs.getString(9), rs.getString(10), rs
						.getString(11), rs.getString(12), rs.getString(13), rs
						.getString(14), rs.getString(15), rs.getString(16), rs
						.getString(17), rs.getString(18), rs.getString(19), rs
						.getString(20), rs.getString(21), rs.getInt(22));
				estudiantes.add(estudiante);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Listando Estudiantes",
					"Error", JOptionPane.ERROR_MESSAGE);
			return null;
		}
		return estudiantes;
	}

	public int agregarEstudiante(Estudiante estudiante) {
		int fila = 0;
		try {
			String sql = "INSERT INTO Estudiante(idEstudiante, idCurso, nombre, apellido, "
					+ "direccion, telefono1, telefono2, email, sexo, estadoCivil, fechaNacimiento,"
					+ " fechaInscripcion, nacionalidad, nombrePadre, telefonoPadre, nombreMadre, "
					+ "telefonoMadre, cedulaPadre, cedulaMadre, observaciones, imagen, numeroDeOrden)"
					+ " VALUES(0,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, estudiante.getIdCurso());
			stmt.setString(2, estudiante.getNombre());
			stmt.setString(3, estudiante.getApellido());
			stmt.setString(4, estudiante.getDireccion());
			stmt.setString(5, estudiante.getTelefono1());
			stmt.setString(6, estudiante.getTelefono2());
			stmt.setString(7, estudiante.getEmail());
			stmt.setString(8, estudiante.getSexo());
			stmt.setString(9, estudiante.getEstadoCivil());
			stmt.setString(10, estudiante.getFechaNacimiento());
			stmt.setString(11, estudiante.getFechaInscripcion());
			stmt.setString(12, estudiante.getNacionalidad());
			stmt.setString(13, estudiante.getNombrePadre());
			stmt.setString(14, estudiante.getTelefonoPadre());
			stmt.setString(15, estudiante.getNombreMadre());
			stmt.setString(16, estudiante.getTelefonoMadre());
			stmt.setString(17, estudiante.getCedulaPadre());
			stmt.setString(18, estudiante.getCedulaMadre());
			stmt.setString(19, estudiante.getObservaciones());
			stmt.setString(20, estudiante.getImagen());
			stmt.setInt(21, estudiante.getNumeroDeOrden());
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Agregando Estudiantes",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int eliminarEstudiante(int id) {
		int fila = 0;
		try {
			String sql = "DELETE FROM Estudiante WHERE idEstudiante = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, id);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Eliminando Estudiantes",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	public int modificarEstudiante(Estudiante estudiante, int id) {
		int fila = 0;
		try {
			String sql = "UPDATE estudiante SET idCurso = ?, nombre = ?, apellido = ?,"
					+ " direccion = ?, telefono1= ?, telefono2= ?, email= ?, sexo= ?,"
					+ " estadoCivil= ?, fechaNacimiento= ?, fechaInscripcion= ?, nacionalidad= ?,"
					+ " nombrePadre= ?, telefonoPadre= ?, nombreMadre= ?, telefonoMadre= ?,"
					+ " cedulaPadre= ?, cedulaMadre= ?, observaciones= ?, imagen= ?, numeroDeOrden= ?"
					+ " WHERE idEstudiante = ?";
			stmt = (PreparedStatement) conexion.hacerEnunciado(sql);
			stmt.setInt(1, estudiante.getIdCurso());
			stmt.setString(2, estudiante.getNombre());
			stmt.setString(3, estudiante.getApellido());
			stmt.setString(4, estudiante.getDireccion());
			stmt.setString(5, estudiante.getTelefono1());
			stmt.setString(6, estudiante.getTelefono2());
			stmt.setString(7, estudiante.getEmail());
			stmt.setString(8, estudiante.getSexo());
			stmt.setString(9, estudiante.getEstadoCivil());
			stmt.setString(10, estudiante.getFechaNacimiento());
			stmt.setString(11, estudiante.getFechaInscripcion());
			stmt.setString(12, estudiante.getNacionalidad());
			stmt.setString(13, estudiante.getNombrePadre());
			stmt.setString(14, estudiante.getTelefonoPadre());
			stmt.setString(15, estudiante.getNombreMadre());
			stmt.setString(16, estudiante.getTelefonoMadre());
			stmt.setString(17, estudiante.getCedulaPadre());
			stmt.setString(18, estudiante.getCedulaMadre());
			stmt.setString(19, estudiante.getObservaciones());
			stmt.setString(20, estudiante.getImagen());
			stmt.setInt(21, estudiante.getNumeroDeOrden());
			stmt.setInt(22, id);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Error Eliminando Estudiantes",
					"Error", JOptionPane.ERROR_MESSAGE);
			return 0;
		} finally {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return fila;
	}

	
}
